#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<queue>

using namespace std;
struct data{
	int mode,s[6],i;
}a[1000+5];
string op,ad;
int n,an;
int getnum(string t){
	int ansv=0,tlen=t.size();
	for(int erer=0;erer<tlen;erer++){
		if(t[erer]>'9'||t[erer]<'0')return 66666;
		ansv=ansv*10+int(t[erer]-48);
		if(ansv>65535)return 66666;
	}
	return ansv;
}
bool pd(data a,data b){
	if(a.mode!=b.mode)return false;
	if(a.s[1]!=b.s[1])return false;
	if(a.s[2]!=b.s[2])return false;
	if(a.s[3]!=b.s[3])return false;
	if(a.s[4]!=b.s[4])return false;
	if(a.s[5]!=b.s[5])return false;
	return true;
}
bool pd2(data a,data b){
	if(a.mode==2)return false;
	if(a.s[1]!=b.s[1])return false;
	if(a.s[2]!=b.s[2])return false;
	if(a.s[3]!=b.s[3])return false;
	if(a.s[4]!=b.s[4])return false;
	if(a.s[5]!=b.s[5])return false;
	return true;
}
int main(){
	freopen("network.in","r",stdin);
	freopen("network.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		cin>>op>>ad;
		int alen=ad.size(),k=0,tt=0;
		string tmp="";
		an++;
		a[an].i=i;
/////////////////////////////////////////////////////////////////////
		if(op=="Server"){
			a[an].mode=1;
			
			for(int j=0;j<alen;j++){
				if(ad[j]=='.'||ad[j]==':')tmp+=ad[j];
			}
			if(tmp!="...:"){
				tt=1;
				printf("ERR\n");
				an--;
				continue;
			}
			tmp="";
			
			for(int j=0;j<=alen;j++){
				if(ad[j]=='.'||ad[j]==':'||j==alen){
					if(tmp==""){
						tt=1;
						printf("ERR\n");
						break;
					}
					if(tmp.size()>1&&tmp[0]=='0'){
						tt=1;
						printf("ERR\n");
						break;
					}
					k++;
					int num=getnum(tmp);
					if(k<=4){
						if(num>255){
							tt=1;
							printf("ERR\n");
							break;
						}
						a[an].s[k]=num;
					}
					else{
						if(num>65535){
							tt=1;
							printf("ERR\n");
							break;
						}
						a[an].s[k]=num;
					}
					tmp="";
				}
				else{
					tmp+=ad[j];
				}
			}
			
			for(int j=1;j<an;j++){
				if(pd(a[j],a[an])){
					tt=1;
					printf("FAIL\n");
					break;
				}
			}
			
			if(tt==1){
				an--;
			}
			else{
				printf("OK\n");
			}
		}
//////////////////////////////////////////////////////////////////////////
		if(op=="Client"){
			a[an].mode=2;
			
			for(int j=0;j<alen;j++){
				if(ad[j]=='.'||ad[j]==':')tmp+=ad[j];
			}
			if(tmp!="...:"){
				tt=1;
				printf("ERR\n");
				an--;
				continue;
			}
			tmp="";
			
			for(int j=0;j<=alen;j++){
				if(ad[j]=='.'||ad[j]==':'||j==alen){
					if(tmp==""){
						tt=1;
						printf("ERR\n");
						break;
					}
					if(tmp.size()>1&&tmp[0]=='0'){
						tt=1;
						printf("ERR\n");
						break;
					}
					k++;
					int num=getnum(tmp);
					if(k<=4){
						if(num>255){
							tt=1;
							printf("ERR\n");
							break;
						}
						a[an].s[k]=num;
					}
					else{
						if(num>65535){
							tt=1;
							printf("ERR\n");
							break;
						}
						a[an].s[k]=num;
					}
					tmp="";
				}
				else{
					tmp+=ad[j];
				}
			}
			
			if(tt==1){
				an--;
				continue;
			}
			
			tt=2;
			
			for(int j=1;j<an;j++){
				if(pd2(a[j],a[an])){
					tt=1;
					printf("%d\n",a[j].i);
					break;
				}
			}
			
			if(tt==2){
				printf("FAIL\n");
			}
		}
		
//		printf("%d %d %d %d %d %d\n\n\n",a[an].mode,a[an].s[1],a[an].s[2],a[an].s[3],a[an].s[4],a[an].s[5]);////dsafads
	}
	return 0;
}

